package com.bobo.medicinechest.util;

import android.graphics.Typeface;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.StyleSpan;

public class PriceFormatUtil {
    
    /**
     * 格式化价格为指定样式
     * @param price 原始价格（可以是10, 10.1, 10.15等格式）
     * @return 格式化后的SpannableString
     */
    public static SpannableString formatPrice(double price, int rmbSize, int integerSize, int decimalSize ) {
        // 将价格格式化为两位小数
        String formattedPrice = String.format("%.2f", price);
        
        // 创建完整的字符串（包含人民币符号）
        String fullText = "￥" + formattedPrice;
        
        // 创建SpannableString
        SpannableString spannableString = new SpannableString(fullText);
        
        // 设置人民币符号的样式
        spannableString.setSpan(
            new AbsoluteSizeSpan(rmbSize, true),
            0, 1, // 人民币符号的位置
            Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
        );
        
        // 设置人民币符号为粗体
        spannableString.setSpan(
            new StyleSpan(Typeface.BOLD),
            0, 1,
            Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
        );
        
        // 找到小数点的位置
        int dotIndex = fullText.indexOf(".");
        
        if (dotIndex != -1) {
            // 设置整数部分的样式
            spannableString.setSpan(
                new AbsoluteSizeSpan(integerSize, true),
                1, dotIndex, // 从￥后面到小数点之前
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
            );
            
            // 设置整数部分为粗体
            spannableString.setSpan(
                new StyleSpan(Typeface.BOLD),
                1, dotIndex,
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
            );
            
            // 设置小数部分的样式
            spannableString.setSpan(
                new AbsoluteSizeSpan(decimalSize, true),
                dotIndex, fullText.length(), // 从小数点到结尾
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
            );
        }
        
        return spannableString;
    }
    
    /**
     * 重载方法，支持字符串输入
     * @param price 价格字符串
     * @return 格式化后的SpannableString
     */
    public static SpannableString formatPrice(String price, int rmbSize, int integerSize, int decimalSize) {
        try {
            double priceValue = Double.parseDouble(price);
            return formatPrice(priceValue, rmbSize, integerSize, decimalSize);
        } catch (NumberFormatException e) {
            // 如果解析失败，返回默认格式
            return new SpannableString("￥0.00");
        }
    }
    
    /**
     * 使用SpannableStringBuilder的替代实现（更灵活）
     */
    public static SpannableStringBuilder formatPriceWithBuilder(double price) {
        String formattedPrice = String.format("%.2f", price);
        int dotIndex = formattedPrice.indexOf(".");
        
        SpannableStringBuilder builder = new SpannableStringBuilder();
        
        // 添加人民币符号（12sp，粗体）
        SpannableString rmbSymbol = new SpannableString("￥");
        rmbSymbol.setSpan(new AbsoluteSizeSpan(12, true), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        rmbSymbol.setSpan(new StyleSpan(Typeface.BOLD), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        builder.append(rmbSymbol);
        
        if (dotIndex != -1) {
            // 整数部分
            String integerPart = formattedPrice.substring(0, dotIndex);
            SpannableString integerSpannable = new SpannableString(integerPart);
            integerSpannable.setSpan(new AbsoluteSizeSpan(18, true), 0, integerPart.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            integerSpannable.setSpan(new StyleSpan(Typeface.BOLD), 0, integerPart.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            builder.append(integerSpannable);
            
            // 小数部分
            String decimalPart = formattedPrice.substring(dotIndex);
            SpannableString decimalSpannable = new SpannableString(decimalPart);
            decimalSpannable.setSpan(new AbsoluteSizeSpan(12, true), 0, decimalPart.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            builder.append(decimalSpannable);
        } else {
            // 如果没有小数点（理论上不会发生，因为已经格式化为两位小数）
            SpannableString priceSpannable = new SpannableString(formattedPrice);
            priceSpannable.setSpan(new AbsoluteSizeSpan(18, true), 0, formattedPrice.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            priceSpannable.setSpan(new StyleSpan(Typeface.BOLD), 0, formattedPrice.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            builder.append(priceSpannable);
        }
        
        return builder;
    }
}